package com.test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @Description TODO
 * <p>
 * Copyright @ 2022 Shanghai Mise Co. Ltd.
 * All right reserved.
 * <p>
 * @Author LiuMingFu
 * @Date 2023/9/18 16:05
 */
public class ListUtil {

    public static void main(String[] args) {
        List<Object> list = new LinkedList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        List<Object> subList = getSubList(list, 0, 4);
        System.out.println(subList);
    }

    /**
     * 根据索引位置，截取集合并形成一个新集合返回
     * 注意：（1）若起始索引超过集合最大长度，将会返回空集合
     * （2）若截止索引超过集合最大长度，将自动截取到集合末尾就停止
     *
     * @param list      原数据集合
     * @param fromIndex 起始索引位置（包含）
     * @param toIndex   截止索引位置（不包含），若数值大于传入的集合最大长度，该截止索引就是集合的最后位置索引，超过的会自动忽略
     * @return
     * @author LiuMingFu
     * @date 2023/9/18
     */
    public static List<Object> getSubList(List<Object> list, int fromIndex, int toIndex) {
        List<Object> resultData = new LinkedList<>();
        int listLength = list.size();
        //起始索引大于传入的集合长度
        if (fromIndex > listLength) {
            return resultData;
        }
        //截止索引大于传入的集合长度
        if (toIndex > listLength) {
            toIndex = listLength;
        }
        resultData = list.subList(fromIndex, toIndex);
        return resultData;
    }


    /**
     * 将Object集合全部转为指定类型的集合
     *
     * @param objectList 目标集合
     * @param targetType 集合中元素需要强制转换的类型
     * @return
     * @author LiuMingFu
     * @date 2023/10/15
     */
    public static <T> List<T> convertListToTargetTypeList(List<Object> objectList, Class<T> targetType) {
        List<T> convertedList = new ArrayList<>();

        for (Object obj : objectList) {
            if (targetType.isInstance(obj)) {
                convertedList.add(targetType.cast(obj));
            } else {
                // Handle conversion failure or other logic
                // You can throw an exception, skip the object, or perform custom conversion logic
            }
        }

        return convertedList;
    }


    /**
     * 快速将特定泛型的集合转为Object集合
     *
     * @param genericList 特定泛型的集合
     * @return
     * @author LiuMingFu
     * @date 2023/10/15
     */
    public static <T> List<Object> convertListToObjectList(List<T> genericList) {
        List<Object> objectList = new ArrayList<>();
        objectList.addAll(genericList);
        return objectList;
    }
}
